package com.wg.dome.handle;

import com.wg.dome.ClientPeer;
import com.wg.dome.ErrorCode;
import com.wg.dome.ErrorHelper;
import com.wg.dome.annotation.Request;
import com.wg.dome.attribute.Attribute;
import com.wg.dome.attribute.AttributeHelper;
import com.wg.dome.entity.user.EquipEntity;
import com.wg.dome.operation.OperationCode;
import com.wg.dome.operation.StripEquipRequest;
import com.wg.dome.operation.StripEquipResponse;
import com.wg.dome.repository.EquipRepositoryEx;
import com.wg.common.net.OperationRequest;
import com.wg.common.net.OperationResponse;
import com.wg.common.net.SendParameters;

/**
 * 脱装备
 */
@Request(OperationCode = OperationCode.STRIP_EQUIP)
public class HandleStripEquipRequest extends BaseHandle {

    @Override
    public OperationResponse execute(ClientPeer peer, OperationRequest request, SendParameters sendParameters) {
        StripEquipRequest stripEquipRequest = new StripEquipRequest(request);
        if (!stripEquipRequest.isValid()) {
            return ErrorHelper.getInvalidResponse(stripEquipRequest);
        }

        if (stripEquipRequest.getPlayerId() != peer.getPlayerId()) {
            return ErrorHelper.getErrorResponse(request.getOperationCode(),
                    ErrorCode.PLAYERID_MATCH_ERROR, stripEquipRequest.getPlayerId(), peer.getPlayerId());
        }

        EquipRepositoryEx equipRepository = new EquipRepositoryEx(peer.getPlayerId());
        EquipEntity stripEquip = equipRepository.getEntity(stripEquipRequest.getSzPos(), stripEquipRequest.getEquipType());
        if (stripEquip == null) {
            return ErrorHelper.getErrorResponse(request.getOperationCode(), ErrorCode.FIGHT_EQUIP_ERROR,
                    stripEquipRequest.getSzPos(), stripEquipRequest.getEquipType());
        }

        byte szPos = stripEquip.getPos();
        stripEquip.setPos((byte) 0);
        equipRepository.update(stripEquip);

        Attribute attribute = AttributeHelper.getSignHeroAttribute(peer.getPlayerId(), szPos);

        StripEquipResponse stripEquipResponse = new StripEquipResponse();
        stripEquipResponse.setEquipId(stripEquip.getId());
        stripEquipResponse.setSzPos(szPos);
        stripEquipResponse.setSzAttribute(attribute.toHashTable());
        return new OperationResponse(request.getOperationCode(), stripEquipResponse);
    }
}
